package com.vben.common.mybatisplus.base;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;

/**
 * 基础分页参数封装
 *
 * @author mldong
 */
@Data
public class PageParam {
    /**
     * 当前页码（默认1）
     */
    private Integer pageNum;

    /**
     * 每页数量（默认10，最大10000）
     */
    private Integer pageSize;

    /**
     * 排序字段（格式：字段1 desc,字段2 asc）
     */
    private String orderBy;

    /**
     * 构建指定泛型类型的 MyBatis Plus 分页对象
     */
    public <T> Page<T> buildMpPage() {
        int pageNum = this.pageNum != null && this.pageNum > 0
                ? this.pageNum : 1;
        int pageSize = this.pageSize != null
                ? Math.min(this.pageSize, 10000)
                : 10;
        return new Page<>(pageNum, pageSize);
    }

    /**
     * 获取安全的每页数量
     */
    public int getSafePageSize() {
        return this.pageSize != null && this.pageSize > 0
                ? Math.min(this.pageSize, 200)
                : 10;
    }

    /**
     * 获取安全的分页参数（起始偏移量）
     */
    public long getOffset() {
        return (long) (pageNum != null && pageNum > 0
                ? (long) (pageNum - 1) * getSafePageSize()
                : 0);
    }
}